#include <bits/stdc++.h>
using namespace std;
// int main()
// {
//     string s;cin>>s;
//     string s1(s);
//     reverse(s1.begin(),s1.end());
//     s+=s1.substr(1);
//     long long x=stol(s);
//     bool is=true;
//     for(int i=2;i<=sqrt(x);i++)
//     {
//         if(x%i==0){
//             is=false;
//             break;
//         }
//     }
//     cout<<(is==false?"noprime":"prime")<<endl;
//     return 0;
// }

// int main()
// {
//     int n;cin>>n;
//     vector<vector<int>> ret(n,vector<int>(2,0));
//     for(int i=0;i<n;i++)
//         for(int j=0;j<2;j++)cin>>ret[i][j];

//     sort(ret.begin(),ret.end());
//     //下一个区间的起始端点比前一个区间的结束端点大就说明不会重叠
//     int count=0,r=ret[0][1];
//     for(int i=1;i<n;i++)
//     {
//         if(ret[i][0]<r)//存在重叠部分
//         {
//             r=min(ret[i][1],r);
//         }
//         else
//         {
//             count++;
//             r=ret[i][1];
//         }
//     }
//     cout<<count+1<<endl;
//     return 0;
// }


using ll=long long;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=55,M=15;
ll ret[N];
ll f[N][M];
ll g[N][M];
int main()
{
    int n,k,d;cin>>n;
    for(int i=1;i<=n;i++)cin>>ret[i];
    cin>>k>>d;
    for(int i=1;i<=n;i++)
    {
        f[i][1]=g[i][1]=ret[i];
        for(int j=2;j<=min(i,k);j++)
        {
            f[i][j]=-INF;
            g[i][j]=INF;
            for(int prev=max(i-d,j-1);prev<=i-1;prev++)
            {
                f[i][j]=max(f[i][j],max(f[prev][j-1]*ret[i],g[prev][j-1]*ret[i]));
                g[i][j]=min(g[i][j],min(f[prev][j-1]*ret[i],g[prev][j-1]*ret[i]));
            }
        }
    }
    ll a=-INF;
    for(int i=k;i<=n;i++)a=max(a,f[i][k]);
    cout<<a<<endl;
    return 0;
}